// hdu5218
//
// 题意：给定n个人排成一圈，m个数的集合，一开始在1号人那儿，
//       每次可以随机选择集合里一个数xi，顺时针走xi个人，删掉前一个人。
//       如果只剩下一个人，那个人就是赢家，输出所有可能赢家人个数及的编号。
//
// 题解：挺容易的dp。这是个约瑟夫问题，就利用约瑟夫递推求解的思路。
//       假设dp[n][k]表示n个人，从1号开始第k个人是否可能获胜。
//       那么转移就是对集合里所有数转移，把k重排到删掉人后，新起点的标号。
//       如果删掉的人就是k那么跳过这次转移。
//
// run: $exec < input
#include <iostream>

int const maxn = 300;
int f[maxn][maxn]; // 1: possible  2: impossible
int a[maxn];
int n, m;

int dis(int i, int j, int n)
{
	return (j >= i) ? j - i : n - i + j;
}

int dfs(int n, int k)
{
	if (n == 1) return 2 - (k == 1);
	if (f[n][k]) return f[n][k];
	for (int i = 0; i < m; i++) {
		int remove = a[i] % n;
		if (!remove) remove = n;
		if (remove == k) continue;
		int tk = dis(remove, k, n);
		if (dfs(n-1, tk) == 1) return f[n][k] = 1;
	}
	return f[n][k] = 2;
}

int main()
{
	std::ios::sync_with_stdio(false);
	int T; std::cin >> T;
	while (T--) {
		std::cin >> n >> m;
		for (int i = 0; i < m; i++) std::cin >> a[i];

		// init
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= n; j++) f[i][j] = 0;

		for (int i = 1; i <= n; i++)
			dfs(n, i);

		int count = 0, first = 0;
		for (int i = 1; i <= n; i++)
			if (f[n][i] == 1) {
				count++;
				if (!first) first = i;
			}
		std::cout << count << '\n' << first;

		for (int i = first + 1; i <= n; i++)
			if (f[n][i] == 1)
				std::cout << ' ' << i;
		std::cout << '\n';
	}
}

